/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.util.ArrayList;
import java.util.List;
//import java.util.logging.Level;
//import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.model.SelectItem;
//import javax.swing.JOptionPane;
import org.cip.esymons.eventos.bc.EventoDelegate;
import org.cip.esymons.eventos.bc.OrganizadorEventoDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.bc.ReservaAmbienteDelegate;
//import org.cip.esymons.eventos.be.Ambiente;
import org.cip.esymons.eventos.be.Evento;
import org.cip.esymons.eventos.be.OrganizadorEvento;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.eventos.be.ReservaAmbiente;
import org.cip.esymons.general.util.Utiles;

/**
 *
 * @author OscarA
 */
public class EventoController {

    EventoDelegate delegate;
    public Evento evento;
    public Evento eventoSeleccionado;
    public List<Evento> listaEvento;
    List<Preevento> listaTodoEventos;
    List<Evento> listaEventosEnProceso;
    List<OrganizadorEvento> listaOrganizador;
    String total;
    String totalEventos;
    String totalProceso;
    Integer codigoEvento;

    public EventoController() {
        inicializar();
    }

    public void inicializar() {
        evento = new Evento();
        eventoSeleccionado = new Evento();
        listaEvento = new ArrayList<Evento>();
        listaTodoEventos = new ArrayList<Preevento>();
        listaEventosEnProceso = new ArrayList<Evento>();
        listaOrganizador = new ArrayList<OrganizadorEvento>();
        delegate = new EventoDelegate();
        eventosCurso();
    }

    public Evento getEventoSeleccionado() {
        return eventoSeleccionado;
    }

    public void setEventoSeleccionado(Evento eventoSeleccionado) {
        this.eventoSeleccionado = eventoSeleccionado;
    }

    public List<OrganizadorEvento> getListaOrganizador() {
        return listaOrganizador;
    }

    public void setListaOrganizador(List<OrganizadorEvento> listaOrganizador) {
        this.listaOrganizador = listaOrganizador;
    }

    public Integer getCodigoEvento() {
        return codigoEvento;
    }

    public void setCodigoEvento(Integer codigoEvento) {
        this.codigoEvento = codigoEvento;
    }

    

    public EventoDelegate getDelegate() {
        return delegate;
    }

    public void setDelegate(EventoDelegate delegate) {
        this.delegate = delegate;
    }

    public Evento getEvento() {
        return evento;
    }

    public void setEvento(Evento evento) {
        this.evento = evento;
    }

    public List<Evento> getListaEvento() {
        eventosCurso();
        return listaEvento;
    }

    public void setListaEvento(List<Evento> listaEvento) {
        this.listaEvento = listaEvento;
    }

    public List<Preevento> getListaTodoEventos() {
        listarTodosEventos();
        return listaTodoEventos;
    }

    public void setListaTodoEventos(List<Preevento> listaTodoEventos) {
        this.listaTodoEventos = listaTodoEventos;
    }

    public List<Evento> getListaEventosEnProceso() {
        listarEventosEnProceso();
        return listaEventosEnProceso;
    }

    public void setListaEventosEnProceso(List<Evento> listaEventosEnProceso) {
        this.listaEventosEnProceso = listaEventosEnProceso;
    }

    public String getTotal() {
        return total;
    }

    public void setTotal(String total) {
        this.total = total;
    }

    public String getTotalProceso() {
        return totalProceso;
    }

    public void setTotalProceso(String totalProceso) {
        this.totalProceso = totalProceso;
    }

    public String getTotalEventos() {
        return totalEventos;
    }

    public void setTotalEventos(String totalEventos) {
        this.totalEventos = totalEventos;
    }

    
    public String listarEventos() {
        try {
            getListaEvento().clear();
            listaEvento = delegate.listarEventos();
        } catch (Exception e) {
        } finally {
            return "";
        }
    }

    public void eventosCurso() {
        try {
            listaEvento = delegate.listarEventoEnCursoXestado(true);
            totalProceso = Utiles.totalRegistro(listaEvento, "evento(s) en proceso");
        } catch (Exception e) {
        }
    }

    public String listarTodosEventos() {
        try {
            listaTodoEventos = delegate.listarTodoEventos();
            totalEventos = Utiles.totalRegistro(listaTodoEventos, "evento(s) en lista.");
        } catch (Exception e) {
        }
        return null;
    }

    public String listarOrganizadores() {
        try {
            OrganizadorEventoDelegate delegadoOrganizador = new OrganizadorEventoDelegate();
            listaOrganizador = delegadoOrganizador.listarPorEvento(codigoEvento);
        } catch (Exception ex) {

        }
        return null;
    }

    public void listarEventosEnProceso() {
        try {
            listaEventosEnProceso = delegate.listarEventosEnProceso();
        } catch (Exception e) {
        }
    }

    public SelectItem[] getComboEventosVigentes() {
        //Combo Eventos en Curso
        try {
            listaEvento = new ArrayList<Evento>();
            listaEvento = delegate.listarEventosEnCurso();
            SelectItem[] comboInfluencia = new SelectItem[listaEvento.size()];
            for (int i = 0; i < listaEvento.size(); i++) {
                String abrev = "";
                if (listaEvento.get(i).getPreevento().getPreNombre().length() > 45) {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre().substring(0, 45);
                } else {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre();
                }
                comboInfluencia[i] = new SelectItem(listaEvento.get(i), abrev);
            }
            return comboInfluencia;

        } catch (Exception e) {
            //Mensaje al usuario
            System.out.println("Error " + e.toString());
            listaEvento = new ArrayList<Evento>();
            SelectItem[] comboInfluencia = new SelectItem[1];
            comboInfluencia[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboInfluencia;
        }
    }

    public SelectItem[] getComboEventos() {
        //Combo Eventos en Curso
        try {
            listaEvento = new ArrayList<Evento>();
            listaEvento = delegate.listarEventos();
            SelectItem[] comboInfluencia = new SelectItem[listaEvento.size()];
            for (int i = 0; i < listaEvento.size(); i++) {
                String abrev = "";
                if (listaEvento.get(i).getPreevento().getPreNombre().length() > 45) {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre().substring(0, 45);
                } else {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre();
                }
                comboInfluencia[i] = new SelectItem(listaEvento.get(i), abrev);
            }
            return comboInfluencia;

        } catch (Exception e) {
            //Mensaje al usuario
            listaEvento = new ArrayList<Evento>();
            SelectItem[] comboInfluencia = new SelectItem[1];
            comboInfluencia[0] = new SelectItem(new Evento(), "No hay Eventos");
            return comboInfluencia;
        }
    }

    public SelectItem[] getComboEventosTotal() {
        //Combo Eventos en Curso
        try {
            listaEvento = new ArrayList<Evento>();
            listaEvento = delegate.listarEventos();
            SelectItem[] comboInfluencia = new SelectItem[listaEvento.size()];
            for (int i = 0; i < listaEvento.size(); i++) {
                String abrev = "";
                if (listaEvento.get(i).getPreevento().getPreNombre().length() > 45) {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre().substring(0, 45);
                } else {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre();
                }
                comboInfluencia[i] = new SelectItem(listaEvento.get(i).getEveCodigo(), abrev);
            }
            return comboInfluencia;

        } catch (Exception e) {
            //Mensaje al usuario
            listaEvento = new ArrayList<Evento>();
            SelectItem[] comboInfluencia = new SelectItem[1];
            comboInfluencia[0] = new SelectItem(0, "No hay Eventos");
            return comboInfluencia;
        }
    }

    public List<Evento> autocompletarEventos(Object event) {
        listaEvento = new ArrayList<Evento>();
         String cond = event.toString();
        try {
            listaEvento = delegate.buscarEventosLike(cond);
        } catch (Exception ex) {
            Logger.getLogger(EventoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaEvento;
    }


    public SelectItem[] getComboEventosLike() {
        try {
            listaEvento = new ArrayList<Evento>();
            listaEvento = delegate.listarEventos();
            SelectItem[] comboInfluencia = new SelectItem[listaEvento.size()];
            for (int i = 0; i < listaEvento.size(); i++) {
                String abrev = "";
                if (listaEvento.get(i).getPreevento().getPreNombre().length() > 45) {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre().substring(0, 45);
                } else {
                    abrev = listaEvento.get(i).getPreevento().getPreNombre();
                }
                comboInfluencia[i] = new SelectItem(abrev, abrev);
            }
            return comboInfluencia;

        } catch (Exception e) {
            //Mensaje al usuario
            listaEvento = new ArrayList<Evento>();
            SelectItem[] comboInfluencia = new SelectItem[1];
            comboInfluencia[0] = new SelectItem("No hay Eventos", "No hay Eventos");
            return comboInfluencia;
        }
    }

    public String cerrarEvento() {
        try {
//            int res = JOptionPane.showConfirmDialog(null, "Esta seguro de querer cerrar el evento", "e-SyMons", JOptionPane.YES_NO_OPTION);
//            if (res == JOptionPane.YES_OPTION) {
            System.out.println("evento: " + evento);
            System.out.println("codigo: " + evento.getEveCodigo());
            System.out.println("estado: " + evento.getEveEstado());
            System.out.println("nombre: " + evento.getPreevento().getPreNombre());
            evento.setEveEstado(0);
            delegate.actualizarEvento(evento);
            eventosCurso();
//            }
        } catch (Exception e) {
        }
        return "";
    }

    public String listarEventosAPostergar() {

        return null;
    }

    public String anularEvento() {
        eventoSeleccionado.setEveEstado(0);
        try {
            PreEventoDelegate delegatePreEvento = new PreEventoDelegate();
            eventoSeleccionado.getPreevento().setPreActivo(false);
            delegatePreEvento.actualizar(eventoSeleccionado.getPreevento());
            delegate.actualizarEvento(eventoSeleccionado);
            ReservaAmbienteDelegate delegateReserva = new ReservaAmbienteDelegate();
            List<ReservaAmbiente> listaReservaAmbientes = new ArrayList<ReservaAmbiente>();
            try {
                listaReservaAmbientes = delegateReserva.listarReservaPorEvento(eventoSeleccionado.getPreevento());
                for (ReservaAmbiente res : listaReservaAmbientes) {
                    delegateReserva.eliminar(res);
                }
            } catch (Exception e) {
            }
        } catch (Exception ex) {
        }
        inicializar();
        return null;
    }
}
